<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>ubuntu上配置git服务器 - 80后的梦想 - 博客频道 - CSDN.NET</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="转载时请注明出处和作者文章出处：http://www.cnblogs.com/xl19862005作者：Xandy这几天来一直在折腾git版本管理服务器，感觉有点头大，一会儿权限不够，一会儿加密文件与用户名不匹配……但功夫不负有心人今天下午总是有所成效，把这些天来我所遇到和所范错误作一个记录，给大家一个参考！今天重新把日志修改了一下，主要解决了gitweb显示问题，与新" />
<script src="http://static.blog.csdn.net/scripts/jquery.js" type="text/javascript"></script>
<script type="text/javascript" src="http://static.blog.csdn.net/scripts/ad.js?v=1.1"></script>
<link rel="Stylesheet" type="text/css" href="http://static.blog.csdn.net/skin/dark1/css/style.css?v=1.1" />
<link id="RSSLink" title="RSS" type="application/rss+xml" rel="alternate" href="/xl19862005/rss/list" />
<link rel="shortcut icon" href="/favicon.ico" />
<link type="text/css" rel="stylesheet" href="http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/blue.css" />
</head>
<body>
<script src="http://csdnimg.cn/pubnav/js/pub_topnav_2011.js"type="text/javascript"></script>

<div id="container">
<div id="header">
    <div class="header">
        <div id="blog_title">
            <h1><a href="/xl19862005">80后的梦想</a></h1>
            <h2></h2>
            <div class="clear"></div>
        </div>
        <div class="clear"></div>
    </div>
</div>
<div id="navigator">
    <div class="navigator_bg"></div>
    <div class="navigator">
        <ul>
            <li id="btnContents"><a href="/xl19862005?viewmode=contents"><span><img src="http://static.blog.csdn.net/images/ico_list.gif">目录视图</span></a></li>
            <li id="btnView"><a href="/xl19862005?viewmode=list"><span><img src="http://static.blog.csdn.net/images/ico_summary.gif">摘要视图</span></a></li>
            <li id="btnRss"><a href="/xl19862005/rss/list"><span><img src="http://static.blog.csdn.net/images/ico_rss.gif">订阅</span></a></li>
</ul>
    </div>
</div>
<script type="text/javascript">
    var username = "xl19862005";
    var _blogger = username;
    var blog_address = "http://blog.csdn.net/xl19862005";
    var static_host = "http://static.blog.csdn.net";
    var currentUserName = "hutianxi1129";
</script>

<div id="body">
<div id="main">
<div class="main">
<div class="notice"> 

<a href="http://blog.csdn.net/blogdevteam/article/details/8899926" target="_blank">
<font color=red>有奖征集活动系列——【HTML5游戏编程之旅】 
   </font></a>



&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<a href="http://www.csdn.net/article/2013-05-28/2815458" target="_blank"><font color=blue>专访邱俊涛：高级JavaScript程序员的代码规范
</font></a>

&nbsp;&nbsp;&nbsp;&nbsp;

<a href="http://ocow.csdn.net/
"target="_blank">
<font color=red>低价抢购开源中国论坛门票


 </font></a>

&nbsp;&nbsp;&nbsp;&nbsp;

<a href="http://blog.csdn.net/blogdevteam/article/details/8900468 "target="_blank">
<font color=red>CSDN博客第一期云计算最佳博主评选
 </font></a>


&nbsp;&nbsp;&nbsp;&nbsp;

<a href="http://blog.csdn.net/blogdevteam/article/details/8853291"target="_blank">
<font color=blue>CSDN博客第二期最佳移动开发博主评选
 </font></a>




</div>
<div id="article_details" class="details">
    <div class="article_title">
    <span class="ico ico_type_Original"></span>
    <h3>
        <span class="link_title"><a href="/xl19862005/article/details/8517907">
        ubuntu上配置git服务器
        </a></span>
    </h3>
</div>

        
    <div class="article_manage">
        <span class="link_categories">
        分类：
            <a href="/xl19862005/article/category/1329804">git</a> 
        </span>
    <span class="link_postdate">2013-01-18 16:54</span>
    <span class="link_view" title="阅读次数">67人阅读</span>
    <span class="link_comments" title="评论次数"><a href="#comments">评论</a>(0)</span>
    <span class="link_collect"><a href="javascript:void(0);" onclick="javascript:collectArticle('ubuntu上配置git服务器','8517907');return false;" title="收藏">收藏</a></span>
    <span class="link_report"><a href="#report"  onclick="javascript:report(8517907,2);return false;" title="举报">举报</a></span>
    
</div>


    
<div id="article_content" class="article_content">
<h1 class="postTitle">转载时请注明出处和作者</h1>
<div id="cnblogs_post_body">
<div>文章出处：<a href="http://www.cnblogs.com/xl19862005">http://www.cnblogs.com/xl19862005</a></div>
<div>作者：Xandy</div>
</div>
<p>这几天来一直在折腾git版本管理服务器，感觉有点头大，一会儿权限不够，一会儿加密文件与用户名不匹配&hellip;&hellip;</p>
<p>但功夫不负有心人今天下午总是有所成效，把这些天来我所遇到和所范错误作一个记录，给大家一个参考！</p>
<p>今天重新把日志修改了一下，主要解决了gitweb显示问题，与新加入的成员无法clone git仓库的问题！</p>
<h1>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需求</h1>
<p>硬件需求：一台Ubuntu或者debian电脑（虚拟机），能通过网络访问到。</p>
<p>软件需求：git-core, gitosis, openssh-server, openssh-client</p>
<h1>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装配置git服务器</h1>
<p>安装git和openssh：</p>
<p>a@server:~$ sudo apt-get install git-core openssh-server openssh-client</p>
<p>新加用户git， 该用户将作为所有代码仓库和用户权限的管理者：</p>
<p>a@server:~$ sudo useradd -m git</p>
<p>a@server:~$ sudo passwd git</p>
<p>建立一个git仓库的存储点：</p>
<p>a@server:~$ sudo mkdir /home/repo</p>
<p>让除了git以外的用户对此目录无任何权限：</p>
<p>a@server:~$ sudo chown git:git /home/repo</p>
<p>a@server:~$ sudo chmod 755 /home/repo&nbsp;&nbsp;<span style="color: #ff0000;"> 注：此处要把git仓库repo的属性设置成755，不然在gitweb中一直无法找到工程</span></p>
<h1>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装配置gitosis</h1>
<p>初始化一下服务器的git用户，这一步其实是为了安装gitosis做准备。在任何一 台机器上使用git，第一次必须要初始化一下：</p>
<p>a@server:~$ git config &ndash;global user.name &ldquo;myname&rdquo;</p>
<p>a@server:~$ git config &ndash;global user.email &ldquo;myname@server&ldquo;</p>
<p>安装一下python的setup tool， 这个也是为了gitosis做准备：</p>
<p>a@server:~$ sudo apt-get install python-setuptools</p>
<p>获得gitosis包：</p>
<p>a@server:~$ cd /tmp</p>
<p>a@server:/tmp$ git clone git://eagain.net/gitosis.git</p>
<p>a@server:/tmp$ cd gitosis</p>
<p>a@server:/tmp/gitosis$ sudo python setup.py install</p>
<p>切换到git用户下：</p>
<p>a@server:/tmp/gitosis$ su git</p>
<p>默认状态下，gitosis会将git仓库放在 git用户的home下，所以我们做一个链接到/home/repo</p>
<p>$ ln -s /home/repo /home/git/repositories</p>
<p>再次返回到默认用户</p>
<p>$ exit</p>
<p>如果你将作为git服务器的管理员，那么在你的电 脑上(另一台pc）生成ssh公钥：</p>
<p>usr@pc1:~$ ssh-keygen -t rsa</p>
<p>将公钥拷贝到服务器的/tmp下：</p>
<p>usr@pc1:~$ scp .ssh/id_rsa.pub git@&lt;server&gt;:/tmp</p>
<p>回到git服务器上</p>
<p>a@server:/tmp/gitosis$ sudo chmod a+r /tmp/id_rsa.pub</p>
<p>让gitosis运行起来：</p>
<p>a@server:/tmp/gitosis$ sudo -H -u git gitosis-init &lt; /tmp/id_rsa.pub</p>
<p>Initialized empty Git repository in /home/repo/gitosis-admin.git/</p>
<p>Reinitialized existing Git repository in /home/repo/gitosis-admin.git/</p>
<p>gitosis的有趣之处在于，它通过一个git仓库来管理配置文件，仓库就放在了/home/repo/gitosis- admin.git。我们需要为一个文件加上可执行权限：</p>
<p>a@server:/home/git$ sudo passwd root</p>
<p>a@server:/home/git$ su</p>
<p>root@server:/home/git# cd repositories</p>
<p>root@server:/home/git/repositories# cd gitosis-admin.git/</p>
<p>root@server:/home/git/repositories/gitosis-admin.git# sudo chmod 755 /home/repo/gitosis-admin.git/hooks/post-update</p>
<p>root@server:/home/git/repositories/gitosis-admin.git# exit</p>
<h1>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在服务器上新建一个测试项目仓库</h1>
<p>我们在服务器上新建一个空的项目仓库，叫&ldquo;teamwork&rdquo;。</p>
<p>切换到git用户：</p>
<p>a@server:/home/git$ su &ndash; git</p>
<p>$ cd /home/repo</p>
<p>$ mkdir teamwork.git</p>
<p>$ cd teamwork.git</p>
<p>$ git init - -bare &nbsp; &nbsp; &nbsp;<span style="color: #ff0000;">注：这是在服务器上运行的，是为了初始化一个根级的git仓库</span></p>
<p>$ exit</p>
<p>但是，到目前为止，这只是一个空仓库，空仓库是不能clone下来的。为了能做clone，我们必须先让某个有权限的人放一个初始化的版本到仓库中。</p>
<p>所以，我们必须先修改一下gitosis-admin.</p>
<h1>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 管理gitosis的配置文件</h1>
<p>刚刚提到，gitosis本身的配置也是通过git来实现的。在你自己的开发机里，把gitosis-admin.git这个仓库clone下来，就可以以管理员的身份修改配置了。</p>
<p>在你的电脑里：</p>
<p>usr@pc1:~/work$ git clone git@&lt;server&gt;:gitosis-admin.git</p>
<p>usr@pc1:~/work$ cd gitosis-admin/</p>
<p>该目录下的keydir目录是用来存放所有需要访问git服务器的用户的ssh公钥：</p>
<p>各个用户按照前面提到的办法生成各自的ssh公钥文件后，把所有人的 ssh公钥文件都拿来，按名字命名一下，比如b.pub, lz.pub等，统统拷贝到keydir下：</p>
<p>usr@pc1:~/work/gitosis-admin$ su root</p>
<p>root@pc1:/home/a/work/gitosis-admin# cp /path/to/.ssh/id_rsa.pub ./keydir/b.pub</p>
<p>root@pc1:/home/a/work/gitosis-admin# exit</p>
<p>修改gitosis.conf文件，我的配置大致如下：</p>
<p>[gitosis]</p>
<p>[group gitosis-admin]</p>
<p>writable = gitosis-admin</p>
<p>members = a@server usr@pc1</p>
<p>[group hello]</p>
<p>writable = teamwork</p>
<p>members = a@server b</p>
<p>[group hello_ro]</p>
<p>readonly = teamwork</p>
<p>members = lz</p>
<p>这个配置文件表达了如下含义：gitosis-admin组成员有a, usr，该组对gitosis-admin仓库有读写权限；</p>
<p>team组有a，b两个成员，该组对teamwork仓库有读写权限；</p>
<p>team_ro组有lz一个成员，对teamwork仓库有只读权限。</p>
<p>当然目前这些配置文件的修改只是在你的本地，你必须推送到远程的gitserver上才能真正生效。</p>
<p>加入新文件、提交并push到git服务器：</p>
<p>usr@pc1:~/work/gitosis-admin$ git add .</p>
<p>usr@pc1:~/work/gitosis-admin$ git commit -am &ldquo;add teamweok prj and users&rdquo;</p>
<p>usr@pc1:~/work/gitosis-admin$ git push origin master</p>
<h1>6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 初始化测试项目</h1>
<p>好了，现在服务器就搭建完了，并且有一个空的项目teamwork在服务器上。接下来呢？当然是测试一下，空仓库是不能clone的，所以需要某一个有写权限的人初始 化一个版本。就我来做吧，以下是在客户端完成。</p>
<p>usr@pc1:~/work$ mkdir teamwork-ori</p>
<p>usr@pc1:~/work$ cd teamwork-ori/</p>
<p>usr@pc1:~/work/teamwork-ori$ git init &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff0000;">注：这是在用户端的PC上执行的，为的是初始化一个本地的版本库</span></p>
<p>usr@pc1:~/work/teamwork-ori$ echo &ldquo;/*add something*/&rdquo; &gt; hello</p>
<p>usr@pc1:~/work/teamwork-ori$ git add .</p>
<p>usr@pc1:~/work/teamwork-ori$ git commit -am &ldquo;initial version&rdquo;</p>
<p>usr@pc1:~/work/teamwork-ori$ git remote add origin git@&lt;server&gt;:teamwork.git</p>
<p>usr@pc1:~/work/teamwork-ori$ git push origin master</p>
<p>到此为止teamwork已经有了一个版本了，team的其他成员只要先clone一下 teamwork仓库，就可以任意玩了。</p>
<p>usr@pc1:~/work/teamwork-ori$ su b</p>
<p>$ cd /home/b</p>
<p>$ git clone git@&lt;server&gt;:teamwork.git</p>
<p>$ cd teamwork</p>
<p>$ vim hello</p>
<p>$ git add .</p>
<p>$ git commit -am &ldquo;b add&rdquo;</p>
<p>$ git push origin master</p>
<p>$ exit</p>
<h1>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加已有git项目</h1>
<p>另外：如果你有一个现成的git仓库，想放到 gitserver上供team使用（比如你clone了一个官方的kernel仓库，想在内部使用它作为基础仓库），怎么办呢。</p>
<p>首先需要从你的工作仓库中得到一个纯仓库, 比如你的工作目录为~/kernel, 你想导出纯仓库到你的优盘里，然后拷贝到gitserver上去。</p>
<p>$ git clone &ndash;bare ~/kernel /media/udisk</p>
<p>然后就拿着优盘，交给gitserver的管理员，让他拷贝到/home/repo/下，同时需要配置 gitosis相关配置文件哦，这个就不用再说了吧。比如：下载ALSA库：</p>
<p>git clone git://android.git.kernel.org/platform/external/alsa-lib.git</p>
<p>git clone git://android.git.kernel.org/platform/external/alsa-utils.git</p>
<p>生成bare库</p>
<p>git clone &ndash;bare alsa-lib alsa-lib.git</p>
<p>git clone &ndash;bare alsa-utils alsa-utils.git</p>
<p>将bare 库移动到git服务器目录</p>
<p>cp alsa-lib.git /home/repo</p>
<p>注意变更所有者，以获取提交权限。</p>
<p>chown -R git alsa-lib.git</p>
<p>然后就O 了，呵呵.</p>
<h1>8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建gitweb</h1>
<p>sudo apt-get install gitweb</p>
<h2>8.1 配置 gitweb</h2>
<p>默认没有 css 加载，把 gitweb 要用的静态文件连接到 DocumentRoot 下：</p>
<p>cd /var/www/</p>
<p>sudo ln -s /usr/share/gitweb/* .</p>
<h2>8.2 修改配置</h2>
<p>sudo vi /etc/gitweb.conf</p>
<p>将 $projectroot 改为git仓库存储目录(例如：/home/git/repositories)，保存后刷新浏览器。</p>
<p>如果没有找到项目，你需要将$projectroot/*.git 的属性改为755，让apache用户有可读权限。可以只改你需要让别人通过web访问的那个git。http://localhost/cgi-bin/gitweb.cgi</p>
<h2>8.3 修改/etc/gitweb.conf 内容</h2>
<p># path to git projects (&lt;project&gt;.git)</p>
<p>#$projectroot = "/var/cache/git";</p>
<p>$projectroot = "/home/git/repositories";</p>
<p># directory to use for temp files</p>
<p>$git_temp = "/tmp";</p>
<p># target of the home link on top of all pages</p>
<p>$home_link = $my_uri || "/";</p>
<p># html text to include at home page</p>
<p>$home_text = "indextext.html";</p>
<p># file with project list; by default, simply scan the projectroot dir.</p>
<p>$projects_list = $projectroot;</p>
<p># stylesheet to use</p>
<p>@stylesheets = ("/gitweb/static/gitweb.css");</p>
<p># javascript code for gitweb</p>
<p>$javascript = "gitweb/static/gitweb.js";</p>
<p># logo to use</p>
<p>$logo = "/gitweb/static/git-logo.png";</p>
<p># the 'favicon'</p>
<p>$favicon = "/gitweb/static/git-favicon.png";</p>
<p># git-diff-tree(1) options to use for generated patches</p>
<p>#@diff_opts = ("-M");</p>
<p>@diff_opts = ();</p>
<h2>8.4 配置apache2</h2>
<p>ubuntu中默认的web目录是/var/www，默认的cgi目录是 /usr/lib/cgi-bin/,安装完成gitweb后，gitweb的gitweb.cgi会自动放置到该目录下。</p>
<p>如果你的cgi路径不是默认的/usr/lib/cgi-bin/，需要将gitweb安装在/usr/lib/cgi-bin中的gitweb.cgi复制到原来配置的cgi-bin路径，并在apache的配置文件/etc/apache2/apache.conf末尾加上以下内容：</p>
<p>SetEnv&nbsp; GITWEB_CONFIG&nbsp;&nbsp; /etc/gitweb.conf</p>
<p>&lt;Directory "/srv/www/cgi-bin/gitweb"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Options FollowSymlinks ExecCGI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Allow from all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; AllowOverride all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Order allow,deny&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;Files gitweb.cgi&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetHandler cgi-script</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Files&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; RewriteEngine on</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; RewriteCond %{REQUEST_FILENAME} !-f</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; RewriteCond %{REQUEST_FILENAME} !-d</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; RewriteRule ^.* /gitweb.cgi/$0 [L,PT]</p>
<p>&lt;/Directory&gt;</p>
<h2>8.5 重新启动apache</h2>
<p>sudo /etc/init.d/apache2 restart</p>
<p>访问http://localhost/cgi-bin/gitweb.cgi&nbsp;</p>
<p><span style="color: #ff0000;">说明一点：如果其它新加入的成员无法clone一个git仓库时，如出现如下错误提示：</span></p>
<p><span style="color: #ff0000;">ERROR:gitosis.serve.main:Repository read access denied&nbsp;</span></p>
<p><span style="color: #ff0000;">原因是当前成员的key命名与在gitosis.conf中的members中的名字不一致！例如所用的key名是 lxq_rsa.pub，而在gitosis.conf中某一group下所用的名称为 lxq@ubuntu</span></p>
<p><span style="color: #ff0000;">则只需要把lxq_rsa.pub重命名为lxq@ubuntu.pub并重新push到服务器上即可！</span></p>
<p><span style="color: #ff0000;">最后奉上一个git学习网站，中文的哦 ^_^<a href="http://progit.org/book/zh/index.html">http://progit.org/book/zh/index.html</a></span></p>
</div>

<div class="share_buttons" id="sharePanel"></div>
<!--192.168.1.236-->
<div class="article_next_prev">
    <li class="prev_article"><span>上一篇：</span><a href="/xl19862005/article/details/8517906">mkimage使用详解（转载）</a></li>
    <li class="next_article"><span>下一篇：</span><a href="/xl19862005/article/details/8517908">关于android中的ramdisk.img及uImage无法包含驱动模块（*.ko）的问题</a></li>
</div>


    
</div>
<div id="ad_cen">
<script type="text/javascript" >BAIDU_CLB_SLOT_ID = "117306";</script>
<script type="text/javascript" src="http://cbjs.baidu.com/js/o.js"></script>
</div>
<script type="text/javascript">
    //new Ad(4, 'ad_cen');
</script>
<div id="comment_title" class="panel_head">查看评论<a name="comments"></a></div>
<div id="comment_list"></div>
<div id="comment_bar"></div>
<div id="comment_form"></div>
<div class="announce">* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场<a name="reply"></a><a name="quote"></a></div>
<script type="text/javascript">
    var fileName = '8517907';
    var commentscount = 0;
    var islock = false
</script>
<script type="text/javascript" src="http://static.blog.csdn.net/scripts/comment.js"></script>
<div id="ad_bot"></div>
<script type="text/javascript">
    new Ad(5, 'ad_bot');
</script>
<div id="report_dialog"></div>

<div id="d-top" style="display:none;">
<a id="d-top-a" href="#" title="回到顶部">
<img src="http://static.blog.csdn.net/images/top.png" alt="TOP" /></a>
</div>
<script type="text/javascript">
    $(function(){
        var d_top=$('#d-top');
        document.onscroll=function(){
            var scrTop=(document.body.scrollTop||document.documentElement.scrollTop);
            if(scrTop>500){
                d_top.show();
            }else{
                d_top.hide();
            }
        }
        $('#d-top-a').click(function(){
            scrollTo(0,0);
            this.blur();
            return false;
        });
    });
</script>

<div class="clear"></div>
</div>
</div>

<div id="side">
<div class="side">
<div id="panel_Profile" class="panel">
<ul class="panel_head"><span>个人资料</span></ul>
<ul class="panel_body profile">
<div id="blog_userface">
    <a href="http://my.csdn.net/xl19862005" target="_blank">
    <img src="http://avatar.csdn.net/C/6/F/1_xl19862005.jpg" title="访问我的空间" style="max-width:90%"/>
    </a>
    <br />
    <span><a href="http://my.csdn.net/xl19862005" class="user_name" target="_blank">xl19862005</a></span>
</div>
<div class="interact">
<a href="javascript:void(0);" class="attent" id="span_add_follow" title="[加关注]"></a>
<a href="javascript:void(0);" class="letter" onclick="loginto(1)" title="[发私信]"></a>
</div>
<div id="blog_medal">
</div>
<ul id="blog_rank">
    <li>访问：<span>6983次</span></li>
    <li>积分：<span>366分</span></li>
    <li>排名：<span>千里之外</span></li>
</ul>
<ul id="blog_statistics">
    <li>原创：<span>29篇</span></li>
    <li>转载：<span>0篇</span></li>
    <li>译文：<span>0篇</span></li>
    <li>评论：<span>30条</span></li>
</ul>
</ul>
</div>



<div class="panel" id="panel_Search">
    <ul class="panel_head"><span>文章搜索</span></ul>
    <ul class="panel_body">
        <form id="frmSearch" action="http://so.csdn.net/search" class="form_search" target="_blank">
        <span><input id="inputSearch" type="text" class="blogsearch" title="请输入关键字" /></span>
        <input id="btnSubmit" type="submit" value="搜索" title="search in blog" />
        <input type="hidden" name="q" id="inputQ" />
        <input type="hidden" name="t" value="blog" />
        <a id="btnSearchBlog" target="_blank"></a>
        </form>
    </ul>
</div><div id="panel_Category" class="panel">
<ul class="panel_head"><span>文章分类</span></ul>
<ul class="panel_body">
<li>
<a href="http://blog.csdn.net/xl19862005/article/category/1329804">git</a><span>(1)</span>
</li>
<li>
<a href="http://blog.csdn.net/xl19862005/article/category/1329805">android</a><span>(17)</span>
</li>
<li>
<a href="http://blog.csdn.net/xl19862005/article/category/1330855">通信</a><span>(3)</span>
</li>
<li>
<a href="http://blog.csdn.net/xl19862005/article/category/1375324">kernel</a><span>(1)</span>
</li>
<li>
<a href="http://blog.csdn.net/xl19862005/article/category/1419927">TI</a><span>(1)</span>
</li>
<li>
<a href="http://blog.csdn.net/xl19862005/article/category/1419928">DM37xx</a><span>(2)</span>
</li>
<li>
<a href="http://blog.csdn.net/xl19862005/article/category/1419929">recovery</a><span>(2)</span>
</li>
<li>
<a href="http://blog.csdn.net/xl19862005/article/category/1419930">uboot</a><span>(2)</span>
</li>
<li>
<a href="http://blog.csdn.net/xl19862005/article/category/1429869">ubuntu</a><span>(1)</span>
</li>
<li>
<a href="http://blog.csdn.net/xl19862005/article/category/1431285">shell</a><span>(1)</span>
</li>
</ul>
</div><div id="panel_Archive" class="panel">
<ul class="panel_head"><span>文章存档</span></ul>
<ul class="panel_body">
<div id="archive_list">
<!--归档统计-->
<li><a href="http://blog.csdn.net/xl19862005/article/month/2013/05">2013年05月</a><span>(5)</span></li><li><a href="http://blog.csdn.net/xl19862005/article/month/2013/04">2013年04月</a><span>(1)</span></li><li><a href="http://blog.csdn.net/xl19862005/article/month/2013/03">2013年03月</a><span>(4)</span></li><li><a href="http://blog.csdn.net/xl19862005/article/month/2013/01">2013年01月</a><span>(19)</span></li>
</div>
</ul>
</div>
<div id="hotarticls" class="panel">
<ul class="panel_head"><span>阅读排行</span></ul>
<ul class="panel_body itemlist">
<li>
<a href="/xl19862005/article/details/8522869" title="android音频口通信（一）——2FSK信号调制">android音频口通信（一）——2FSK信号调制</a><span>(1959)</span>
</li>
<li>
<a href="/xl19862005/article/details/8526484" title="android音频口通信（二）——2FSK信号解调">android音频口通信（二）——2FSK信号解调</a><span>(1359)</span>
</li>
<li>
<a href="/xl19862005/article/details/8860699" title="android音频通信(三)——双向通信(A2B协议)之手机接收">android音频通信(三)——双向通信(A2B协议)之手机接收</a><span>(473)</span>
</li>
<li>
<a href="/xl19862005/article/details/8517916" title="IT工程师的出路(转)">IT工程师的出路(转)</a><span>(264)</span>
</li>
<li>
<a href="/xl19862005/article/details/8517918" title="android recovery模式及ROM制作">android recovery模式及ROM制作</a><span>(238)</span>
</li>
<li>
<a href="/xl19862005/article/details/8926755" title="dm37xx android2.3.4增加recovery升级功能（一） —— 代码修改">dm37xx android2.3.4增加recovery升级功能（一） —— 代码修改</a><span>(209)</span>
</li>
<li>
<a href="/xl19862005/article/details/8517911" title="android双屏显示的一些修改与尝试">android双屏显示的一些修改与尝试</a><span>(207)</span>
</li>
<li>
<a href="/xl19862005/article/details/8919423" title="android2.3.4增加gsensor">android2.3.4增加gsensor</a><span>(199)</span>
</li>
<li>
<a href="/xl19862005/article/details/8517915" title="android串口通信">android串口通信</a><span>(182)</span>
</li>
<li>
<a href="/xl19862005/article/details/8517921" title="android socket编程">android socket编程</a><span>(177)</span>
</li>
</ul>
</div>
<div id="hotarticls2" class="panel">
<ul class="panel_head"><span>评论排行</span></ul>
<ul class="panel_body itemlist">
<li>
<a href="/xl19862005/article/details/8522869" title="android音频口通信（一）——2FSK信号调制">android音频口通信（一）——2FSK信号调制</a><span>(15)</span>
</li>
<li>
<a href="/xl19862005/article/details/8526484" title="android音频口通信（二）——2FSK信号解调">android音频口通信（二）——2FSK信号解调</a><span>(7)</span>
</li>
<li>
<a href="/xl19862005/article/details/8517918" title="android recovery模式及ROM制作">android recovery模式及ROM制作</a><span>(4)</span>
</li>
<li>
<a href="/xl19862005/article/details/8926755" title="dm37xx android2.3.4增加recovery升级功能（一） —— 代码修改">dm37xx android2.3.4增加recovery升级功能（一） —— 代码修改</a><span>(4)</span>
</li>
<li>
<a href="/xl19862005/article/details/8517904" title="Android JNI编程指南及模拟器配置问题">Android JNI编程指南及模拟器配置问题</a><span>(0)</span>
</li>
<li>
<a href="/xl19862005/article/details/8517921" title="android socket编程">android socket编程</a><span>(0)</span>
</li>
<li>
<a href="/xl19862005/article/details/8704795" title="关于wpa_supplicant.conf">关于wpa_supplicant.conf</a><span>(0)</span>
</li>
<li>
<a href="/xl19862005/article/details/8706953" title="调整屏幕的默认超时时间">调整屏幕的默认超时时间</a><span>(0)</span>
</li>
<li>
<a href="/xl19862005/article/details/8706969" title="android添加开机声音">android添加开机声音</a><span>(0)</span>
</li>
<li>
<a href="/xl19862005/article/details/8717645" title="调整内核驱动加载的顺序">调整内核驱动加载的顺序</a><span>(0)</span>
</li>
</ul>
</div>
<div id="homepageArticles" class="panel">
<ul class="panel_head"><span>推荐文章</span></ul>
<ul class="panel_body" id="ad_commend"></ul>
</div>
<script type="text/javascript">
 new Ad(12, 'ad_commend');
</script><div id="newcomments" class="panel">
<ul class="panel_head"><span>最新评论</span></ul>
<ul class="panel_body itemlist">
    <li>
    <a href="/xl19862005/article/details/8526484#comments">android音频口通信（二）——2FSK信号解调</a>
    <p style="margin:0px;"><a href="/wsctao" class="user_name">wsctao</a>:
楼主，同问三楼和四楼的问题
    </p>
    </li>
    <li>
    <a href="/xl19862005/article/details/8926755#comments">dm37xx android2.3.4增加recovery升级功能（一） —— 代码修改</a>
    <p style="margin:0px;"><a href="/xl19862005" class="user_name">xl19862005</a>:
@brantyou:我这里用的是UBI文件系统，不一定非得用UBI啊，ext4fs也可以用的，看你系...
    </p>
    </li>
    <li>
    <a href="/xl19862005/article/details/8926755#comments">dm37xx android2.3.4增加recovery升级功能（一） —— 代码修改</a>
    <p style="margin:0px;"><a href="/xl19862005" class="user_name">xl19862005</a>:
@brantyou:这是UBI文件系统挂载点，关于UBI文件系统挂载的具体内容网上很多的，rootf...
    </p>
    </li>
    <li>
    <a href="/xl19862005/article/details/8926755#comments">dm37xx android2.3.4增加recovery升级功能（一） —— 代码修改</a>
    <p style="margin:0px;"><a href="/brantyou" class="user_name">brantyou</a>:
请教一下，你这些分区都用的是什么文件系统？是不是要使用recovery功能都必须得用ubifs文件系...
    </p>
    </li>
    <li>
    <a href="/xl19862005/article/details/8926755#comments">dm37xx android2.3.4增加recovery升级功能（一） —— 代码修改</a>
    <p style="margin:0px;"><a href="/brantyou" class="user_name">brantyou</a>:
博主你好，我想请教一下root=ubi0:rootfs 这个是怎么确定的？
    </p>
    </li>
    <li>
    <a href="/xl19862005/article/details/8517918#comments">android recovery模式及ROM制作</a>
    <p style="margin:0px;"><a href="/xl19862005" class="user_name">xl19862005</a>:
@brantyou:请把你uboot里面对应的bootcmd完整的贴上来，从你现在的现象看，是你把默...
    </p>
    </li>
    <li>
    <a href="/xl19862005/article/details/8517918#comments">android recovery模式及ROM制作</a>
    <p style="margin:0px;"><a href="/brantyou" class="user_name">brantyou</a>:
目前我已经设置了这个uboot的参数，传递到kernel中。但是启动内核之后，发现无法正常加载到re...
    </p>
    </li>
    <li>
    <a href="/xl19862005/article/details/8517918#comments">android recovery模式及ROM制作</a>
    <p style="margin:0px;"><a href="/xl19862005" class="user_name">xl19862005</a>:
@brantyou:recovery分区在哪没关系（之前做的这个recovery是在sdcard里的...
    </p>
    </li>
    <li>
    <a href="/xl19862005/article/details/8517918#comments">android recovery模式及ROM制作</a>
    <p style="margin:0px;"><a href="/brantyou" class="user_name">brantyou</a>:
请问楼主，你这个recovery是TF卡里的吗？如果我在Nand中分一个recovery分区，那么处...
    </p>
    </li>
    <li>
    <a href="/xl19862005/article/details/8522869#comments">android音频口通信（一）——2FSK信号调制</a>
    <p style="margin:0px;"><a href="/xl19862005" class="user_name">xl19862005</a>:
@charles_hzr:发到网上的只是最原始版的示例代码，现在已经优化更新到了V2.1版本，收发通...
    </p>
    </li>
</ul>
</div>
</div>
<div class="clear"></div>
</div>

<div class="clear"></div>
</div>

<script type="text/javascript" src="http://static.blog.csdn.net/scripts/newblog.min.js?v=1.1"></script>
<script type="text/javascript" src="http://medal.blog.csdn.net/showblogmedal.ashx?blogid=1402821"></script>

<script type="text/javascript">
document.write('<script type="text/javascript" src="http://csdnimg.cn/pubfooter/js/publib_footer.js?' + Math.floor(new Date()/120000).toString(36) + '="></'+'script>');
</script>

<script type="text/javascript">document.write("<img src=http://counter.csdn.net/pv.aspx?id=24 border=0 width=0 height=0>");</script>
<script type="text/javascript" src="http://www.csdn.net/ui/scripts/Csdn/counter.js?v=1"></script>


<script type="text/javascript" src="http://ad.csdn.net/scripts/ad-blog.js"></script>

</div>
</body>
</html>